package com.stoneframe.util.baseDate;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateHelper {
	
	private final static SimpleDateFormat sdfYear=new SimpleDateFormat("yyyy");
	
	private final static SimpleDateFormat sdfDay=new SimpleDateFormat("yyyy-MM-dd");
	
	private final static SimpleDateFormat sdfDays=new SimpleDateFormat("yyyyMMdd");
	
	private final static SimpleDateFormat sdfTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	/**
	 * 获取YYYY格式
	 * @return String
	 */
	public static String getYear(){
		return sdfYear.format(new Date());
	}
	
	/**
	 * 获取YYYY-MM-DD格式
	 * @return
	 */
	public static String getDay() {
		return sdfDay.format(new Date());
	}
	
	/**
	 * 获取YYYYMMDD格式
	 * @return
	 */
	public static String getDays(){
		return sdfDays.format(new Date());
	}

	/**
	 * 获取YYYY-MM-DD HH:mm:ss格式
	 * @return
	 */
	public static String getTime() {
		return sdfTime.format(new Date());
	}
	
	/**
	 * 格式化日期
	 */
	public static Date parseDate(String date) {
		try {
			return sdfDay.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 日期比较，如果s>=e 返回true 否则返回false
	 */
	public static boolean compareDate(String s, String e) {
		if(parseDate(s)==null||parseDate(e)==null){
			return false;
		}
		return parseDate(s).getTime() >=parseDate(e).getTime();
	}
	
	/**
	 * 校验日期是否合法
	 */
	public static boolean isDate(String s) {
		try {
			sdfDay.parse(s);
			return true;
		} catch (Exception e) {
			// 如果throw java.text.ParseException或者NullPointerException，就说明格式不对
			return false;
		}
	}
	
	/**
	 * 时间相减得到年
	 */
	public static int getDiffYear(String startTime,String endTime) {
		try {
			long aa=0;
			int years=(int) (((sdfDay.parse(endTime).getTime()-sdfDay.parse(startTime).getTime())/ (1000 * 60 * 60 * 24))/365);
			return years;
		} catch (Exception e) {
			// 如果throw java.text.ParseException或者NullPointerException，就说明格式不对
			return 0;
		}
	}
	
	 /**
     * 时间相减得到天数
     */
    public static long getDiffDay(String beginDateStr,String endDateStr){
        long day=0;
        java.util.Date beginDate = null;
        java.util.Date endDate = null;
        try {
			beginDate = sdfDay.parse(beginDateStr);
			endDate= sdfDay.parse(endDateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
        day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
        return day;
    }
    
    /**
     * 得到n天之后的日期
     */
    public static String getAfterDayDate(String days) {
    	int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        String dateStr = sdfTime.format(date);
        return dateStr;
    }
    
    /**
     * 得到n天之后是周几
     */
    public static String getAfterDayWeek(String days) {
    	int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("E");
        String dateStr = sdf.format(date);
        return dateStr;
    }
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
